class TrieNode:
def __init__(self, Node = None, flag = False):
self.letters = [None] * 27
self.flag = flag
if Node:
self.letters[ord(letter) - 97] = Node
class Trie:
def __init__(self):
self.root = TrieNode()
def insert(self, word: str) -> None:
a = self.root
for i in range(len(word)):
index = ord(word[i]) - 97
if not a.letters[index]:
if i == len(word) -1:
a.letters[index] = TrieNode(flag = True)
a = a.letters[index]
continue
a.letters[index] = TrieNode()
a = a.letters[index]
else:
a = a.letters[index]
if i == len(word) -1:
a.flag = True
continue
def search(self, word: str) -> bool:
a = self.root
index = ord(word[i]) - 97
for i in range(len(word)):
if not a.letters[index]:
return False
else:
a = a.letters[index]
if i == len(word) -1:
if a.flag == True:
return True
continue
return False
def startsWith(self, prefix: str) -> bool:
a = self.root
for i in range(len(prefix)):
if not a.letters[ord(prefix[i]) - 97]:
return False
else:
a = a.letters[ord(prefix[i]) - 97]
return True
# Your Trie object will be instantiated and called as such:
# obj = Trie()
# obj.insert(word)
# param_2 = obj.search(word)
# param_3 = obj.startsWith(prefix)
1436A - Reorder | 1363C - Game On Leaves |
1373C - Pluses and Minuses | 1173B - Nauuo and Chess |
318B - Strings of Power | 1625A - Ancient Civilization |
864A - Fair Game | 1663B - Mike's Sequence |
448A - Rewards | 1622A - Construct a Rectangle |
1620A - Equal or Not Equal | 1517A - Sum of 2050 |
620A - Professor GukiZ's Robot | 1342A - Road To Zero |
1520A - Do Not Be Distracted | 352A - Jeff and Digits |
1327A - Sum of Odd Integers | 1276A - As Simple as One and Two |
812C - Sagheer and Nubian Market | 272A - Dima and Friends |
1352C - K-th Not Divisible by n | 545C - Woodcutters |
1528B - Kavi on Pairing Duty | 339B - Xenia and Ringroad |
189A - Cut Ribbon | 1182A - Filling Shapes |
82A - Double Cola | 45A - Codecraft III |
1242A - Tile Painting | 1663E - Are You Safe |